home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gigarom 1
/
Gigarom Macintosh Archives (Quantum Leap)(CDRM1080320)(1993).iso
/
FILES
/
HYP
/
E-G
/
FinderHype.cpt
/
FinderHype
/
card_2998.txt
< prev
next >
Wrap
Text File
|
1989-02-26
|
27KB
|
975 lines
-- card: 2998 from stack: in
-- bmap block id: 3719
-- flags: 4000
-- background id: 2725
-- name:
----- HyperTalk script -----
on opencard
put the long date into card field "Date"
put the time into card field "Time"
end opencard
On HandleDoc
put ((scroll of card field "list"+the clickv - top of card field "list") div textheight of card field "list")+1 into t
get line t of card field "names"
if it ≠ empty then
put PopUpMenu(it,0,item 3 of rect of target,item 2 of rect of target) into res
set hilite of target to false
if res > 0 then open item res of line t of card field "Docs" with line t of card field "Paths"
end if
end HandleDoc
function whichline
return ((scroll of target+the clickv-top of target) div textheight of target)+1
end whichline
-- part 7 (field)
-- low flags: 01
-- high flags: 0000
-- rect: left=436 top=324 right=342 bottom=509
-- title width / last selected line: 0
-- icon id / first selected line: 0 / 0
-- text alignment: 65535
-- font id: 3
-- text size: 12
-- style flags: 2048
-- line height: 16
-- part name: Time
-- part 13 (field)
-- low flags: 01
-- high flags: 0000
-- rect: left=0 top=325 right=342 bottom=231
-- title width / last selected line: 0
-- icon id / first selected line: 0 / 0
-- text alignment: 0
-- font id: 3
-- text size: 12
-- style flags: 2048
-- line height: 16
-- part name: Date
-- part 14 (field)
-- low flags: 01
-- high flags: 4007
-- rect: left=21 top=59 right=298 bottom=249
-- title width / last selected line: 0
-- icon id / first selected line: 0 / 0
-- text alignment: 0
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name: List
----- HyperTalk script -----
on mouseup
get line whichline() of card field "paths"
if it ≠ empty then open it
end mouseup
-- part 15 (button)
-- low flags: 00
-- high flags: 2000
-- rect: left=22 top=43 right=59 bottom=65
-- title width / last selected line: 0
-- icon id / first selected line: 0 / 0
-- text alignment: 1
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name: Add Application
----- HyperTalk script -----
on mouseUp
Put "Select an application to add to the list. Cancel to quit."
repeat forever
put filename("APPL") into launchthis
if launchthis is empty then exit repeat
lock screen
get lastpathcomponent(launchthis)
repeat with x = 1 to the number of lines in card field "list"
if line x of card field "list" = it then
put launchthis into line x of card field "paths"
put empty into launchthis
exit repeat
end if
if line x of card field "list" > it then
put it & return before line x of card field "list"
put return before line x of card field "Docs"
put return before line x of card field "names"
put return before line x of card field "paths"
put launchthis into line x of card field "paths"
put empty into launchthis
exit repeat
end if
end repeat
if launchthis ≠ empty then
put it & return into line x+1 of card field "List"
put launchthis into line x+1 of card field "Paths"
end if
end repeat
hide message
set scroll of card field "List" to 0
end mouseup
-- part 16 (button)
-- low flags: 00
-- high flags: 2000
-- rect: left=107 top=43 right=59 bottom=149
-- title width / last selected line: 0
-- icon id / first selected line: 0 / 0
-- text alignment: 1
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name: Delete Application
----- HyperTalk script -----
on mouseUp
if card field "List" is empty then exit mouseup
DoList "Delete","Cancel",card field "List","DIS-+","Choose applications to delete."
if the result is empty then exit mouseup else put the result into App
lock screen
repeat with x = number of items of App down to 1
get item x of app
delete line it of card field "List"
delete line it of card field "Paths"
delete line it of card field "Names"
delete line it of card field "Docs"
end repeat
Set scroll of card field "List" to 0
end mouseUp
-- part 42 (field)
-- low flags: 81
-- high flags: 0007
-- rect: left=47 top=39 right=264 bottom=486
-- title width / last selected line: 0
-- icon id / first selected line: 0 / 0
-- text alignment: 0
-- font id: 3
-- text size: 9
-- style flags: 0
-- line height: 12
-- part name: Paths
-- part 45 (field)
-- low flags: 81
-- high flags: 4007
-- rect: left=0 top=31 right=290 bottom=490
-- title width / last selected line: 0
-- icon id / first selected line: 0 / 0
-- text alignment: 0
-- font id: 3
-- text size: 9
-- style flags: 0
-- line height: 12
-- part name: Docs
-- part 66 (button)
-- low flags: 00
-- high flags: 2000
-- rect: left=66 top=43 right=59 bottom=106
-- title width / last selected line: 0
-- icon id / first selected line: 0 / 0
-- text alignment: 1
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name: Add Document
----- HyperTalk script -----
on mouseup
if card field "list" is empty then exit mouseup
repeat forever
put "Please select a document to add. Cancel to quit."
put filename() into docpath
if docpath is empty then exit repeat
DOList select,cancel,card field "List","ONE-+","Select the application it goes with."
if the result = empty then exit repeat else put the result into App
get lastpathcomponent(docpath)
repeat with m = 1 to number of items in line app of card field "names"
if item m of line app of card field "names" = it then
put docpath into item m of line app of card field "docs"
exit repeat
else if item m of line app of card field "names" > it then
put docpath & "," before item m of line app of card field "docs"
put it & "," before item m of line app of card field "names"
exit repeat
end if
end repeat
put number of items of line app of card field "names"+1 into ck
if last item of line app of card field "names" < it then
put docpath into item ck of line app of card field "Docs"
put it into item ck of line app of card field "Names"
end if
end repeat
hide message
end mouseup
-- part 67 (button)
-- low flags: 00
-- high flags: 2000
-- rect: left=150 top=43 right=59 bottom=191
-- title width / last selected line: 0
-- icon id / first selected line: 0 / 0
-- text alignment: 1
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name: Delete Document
----- HyperTalk script -----
on mouseUp
if card field "List" is empty then exit mouseup
repeat forever
DOList "Choose","Cancel",card field "List","ONE-+","Choose application containing documents."
if the result = empty then exit repeat else put the result into me
if line me of card field "names" = empty then exit repeat
DOList "Delete","Cancel",return & line me of card field "names","DIS+", "Choose a document to delete."
if the result is empty then exit repeat else put the result into doc
lock screen
repeat with x = number of items of doc down to 1
get item x of doc
if number of items of line me of card field "names" = 1 then
put empty into line me of card field "names"
put empty into line me of card field "docs"
else
delete item it of line me of card field "Names"
delete item it of line me of card field "Docs"
end if
end repeat
end repeat
hide message
end mouseUp
-- part 69 (button)
-- low flags: 00
-- high flags: 2000
-- rect: left=209 top=59 right=75 bottom=231
-- title width / last selected line: 0
-- icon id / first selected line: 29332 / 29332
-- text alignment: 1
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name:
----- HyperTalk script -----
on mousedown
HandleDoc
end mousedown
-- part 70 (button)
-- low flags: 00
-- high flags: 2000
-- rect: left=209 top=75 right=91 bottom=231
-- title width / last selected line: 0
-- icon id / first selected line: 29332 / 29332
-- text alignment: 1
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name:
----- HyperTalk script -----
on mousedown
HandleDoc
end mousedown
-- part 71 (button)
-- low flags: 00
-- high flags: 2000
-- rect: left=209 top=91 right=107 bottom=231
-- title width / last selected line: 0
-- icon id / first selected line: 29332 / 29332
-- text alignment: 1
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name:
----- HyperTalk script -----
on mousedown
HandleDoc
end mousedown
-- part 72 (button)
-- low flags: 00
-- high flags: 2000
-- rect: left=209 top=107 right=123 bottom=231
-- title width / last selected line: 0
-- icon id / first selected line: 29332 / 29332
-- text alignment: 1
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name:
----- HyperTalk script -----
on mousedown
HandleDoc
end mousedown
-- part 73 (button)
-- low flags: 00
-- high flags: 2000
-- rect: left=209 top=123 right=139 bottom=231
-- title width / last selected line: 0
-- icon id / first selected line: 29332 / 29332
-- text alignment: 1
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name:
----- HyperTalk script -----
on mousedown
HandleDoc
end mousedown
-- part 74 (button)
-- low flags: 00
-- high flags: 2000
-- rect: left=209 top=139 right=155 bottom=231
-- title width / last selected line: 0
-- icon id / first selected line: 29332 / 29332
-- text alignment: 1
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name:
----- HyperTalk script -----
on mousedown
HandleDoc
end mousedown
-- part 75 (button)
-- low flags: 00
-- high flags: 2000
-- rect: left=209 top=155 right=171 bottom=231
-- title width / last selected line: 0
-- icon id / first selected line: 29332 / 29332
-- text alignment: 1
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name:
----- HyperTalk script -----
on mousedown
HandleDoc
end mousedown
-- part 76 (button)
-- low flags: 00
-- high flags: 2000
-- rect: left=209 top=171 right=187 bottom=231
-- title width / last selected line: 0
-- icon id / first selected line: 29332 / 29332
-- text alignment: 1
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name:
----- HyperTalk script -----
on mousedown
HandleDoc
end mousedown
-- part 77 (button)
-- low flags: 00
-- high flags: 2000
-- rect: left=209 top=187 right=203 bottom=231
-- title width / last selected line: 0
-- icon id / first selected line: 29332 / 29332
-- text alignment: 1
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name:
----- HyperTalk script -----
on mousedown
HandleDoc
end mousedown
-- part 78 (button)
-- low flags: 00
-- high flags: 2000
-- rect: left=209 top=203 right=219 bottom=231
-- title width / last selected line: 0
-- icon id / first selected line: 29332 / 29332
-- text alignment: 1
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name:
----- HyperTalk script -----
on mousedown
HandleDoc
end mousedown
-- part 79 (button)
-- low flags: 00
-- high flags: 2000
-- rect: left=209 top=218 right=234 bottom=231
-- title width / last selected line: 0
-- icon id / first selected line: 29332 / 29332
-- text alignment: 1
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name:
----- HyperTalk script -----
on mousedown
HandleDoc
end mousedown
-- part 80 (button)
-- low flags: 00
-- high flags: 2000
-- rect: left=209 top=234 right=250 bottom=231
-- title width / last selected line: 0
-- icon id / first selected line: 29332 / 29332
-- text alignment: 1
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name:
----- HyperTalk script -----
on mousedown
HandleDoc
end mousedown
-- part 81 (button)
-- low flags: 00
-- high flags: 2000
-- rect: left=209 top=250 right=266 bottom=231
-- title width / last selected line: 0
-- icon id / first selected line: 29332 / 29332
-- text alignment: 1
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name:
----- HyperTalk script -----
on mousedown
HandleDoc
end mousedown
-- part 82 (button)
-- low flags: 00
-- high flags: 2000
-- rect: left=209 top=266 right=282 bottom=231
-- title width / last selected line: 0
-- icon id / first selected line: 29332 / 29332
-- text alignment: 1
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name:
----- HyperTalk script -----
on mousedown
HandleDoc
end mousedown
-- part 83 (field)
-- low flags: 80
-- high flags: 4007
-- rect: left=20 top=65 right=336 bottom=512
-- title width / last selected line: 0
-- icon id / first selected line: 0 / 0
-- text alignment: 0
-- font id: 3
-- text size: 9
-- style flags: 0
-- line height: 12
-- part name: Names
-- part 84 (field)
-- low flags: 81
-- high flags: 4007
-- rect: left=269 top=65 right=290 bottom=503
-- title width / last selected line: 0
-- icon id / first selected line: 0 / 0
-- text alignment: 0
-- font id: 3
-- text size: 9
-- style flags: 0
-- line height: 12
-- part name: StackPaths
-- part 85 (field)
-- low flags: 01
-- high flags: 4007
-- rect: left=276 top=59 right=172 bottom=506
-- title width / last selected line: 0
-- icon id / first selected line: 0 / 0
-- text alignment: 0
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name: Stacks
----- HyperTalk script -----
on mouseup
get line whichline() of card field "stackpaths"
if it ≠ empty then go it
end mouseup
-- part 88 (button)
-- low flags: 00
-- high flags: 2000
-- rect: left=277 top=43 right=59 bottom=351
-- title width / last selected line: 0
-- icon id / first selected line: 0 / 0
-- text alignment: 1
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name: Add Stack
----- HyperTalk script -----
on mouseup
put "Select a stack to add to the list. Cancel to quit."
repeat forever
put filename("STAK") into launchthis
if launchthis is empty then exit repeat
lock screen
get lastpathcomponent(launchthis)
repeat with x = 1 to the number of lines in card field "stacks"
if line x of card field "stacks" = it then
put launchthis into line x of card field "stackpaths"
put empty into launchthis
exit repeat
end if
if line x of card field "stacks" > it then
put it & return before line x of card field "stacks"
put return before line x of card field "stackpaths"
put launchthis into line x of card field "stackpaths"
put empty into launchthis
exit repeat
end if
end repeat
if launchthis <> empty then
put launchthis into line x+1 of card field "StackPaths"
put it & return into line x+1 of card field "Stacks"
end if
end repeat
hide message
Set Scroll of card field "Stacks" to 0
end mouseup
-- part 90 (button)
-- low flags: 00
-- high flags: 2000
-- rect: left=352 top=43 right=59 bottom=427
-- title width / last selected line: 0
-- icon id / first selected line: 0 / 0
-- text alignment: 1
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name: Delete Stack
----- HyperTalk script -----
on mouseUp
if card field "stacks" is empty then exit mouseup
DOList "Delete","Cancel",card field stacks,"DIS+-","Select stacks to delete."
if the result is empty then exit mouseup else put the result into stacks
lock screen
repeat with y = number of items of stacks down to 1
get item y of stacks
delete line it of card field "stacks"
delete line it of card field "stackpaths"
end repeat
set scroll of card field "stacks" to 0
end mouseUp
-- part 116 (button)
-- low flags: 00
-- high flags: 2000
-- rect: left=192 top=43 right=59 bottom=248
-- title width / last selected line: 0
-- icon id / first selected line: 0 / 0
-- text alignment: 1
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name: Launch Application
----- HyperTalk script -----
on mouseUp
put "Please select an application to launch."
put filename("APPL") into launchthis
hide message
if launchthis ≠ empty then open launchthis
end mouseUp
-- part 117 (button)
-- low flags: 00
-- high flags: 2000
-- rect: left=428 top=43 right=59 bottom=505
-- title width / last selected line: 0
-- icon id / first selected line: 0 / 0
-- text alignment: 1
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name: Launch Stack
----- HyperTalk script -----
on mouseUp
put "Please select a HyperCard stack to launch."
put filename("STAK") into launchthis
hide message
if launchthis ≠ empty then go launchthis
end mouseUp
-- part 126 (button)
-- low flags: 00
-- high flags: 2000
-- rect: left=426 top=185 right=201 bottom=505
-- title width / last selected line: 0
-- icon id / first selected line: 0 / 0
-- text alignment: 1
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name:
----- HyperTalk script -----
on mouseUp
type space with commandkey
end mouseup
-- part 158 (field)
-- low flags: 01
-- high flags: 4007
-- rect: left=276 top=201 right=297 bottom=506
-- title width / last selected line: 0
-- icon id / first selected line: 0 / 0
-- text alignment: 0
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name: DAs
----- HyperTalk script -----
on mouseup
get line whichline() of card field "DAs"
if it <> empty then domenu it
end mouseup
-- part 169 (button)
-- low flags: 00
-- high flags: 2000
-- rect: left=277 top=185 right=201 bottom=352
-- title width / last selected line: 0
-- icon id / first selected line: 0 / 0
-- text alignment: 1
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name: Add DA
----- HyperTalk script -----
on mouseUp
GetDaNames
DoList "Add DAs","Cancel",namesofDas,"DIS","Select Das to add."
if the result = empty then exit mouseup else put the result into MyDA
set lockscreen to true
repeat with y = 1 to number of items of MyDA
repeat with x = 1 to the number of lines in card field "DAs"
if line x of card field "DAs" = item y of MyDA then
put empty into item y of MyDA
exit repeat
end if
if line x of card field "DAs" > item y of MyDA then
put return before line x of card field "Das"
put item y of MyDA into line x of card field "DAs"
put empty into item y of MyDA
exit repeat
end if
end repeat
if item y of MyDA <> empty then put item y of MyDA into line x+1 of card field "DAs"
end repeat
set cursor to 3
end mouseUp
-- part 170 (button)
-- low flags: 00
-- high flags: 2000
-- rect: left=353 top=185 right=201 bottom=425
-- title width / last selected line: 0
-- icon id / first selected line: 0 / 0
-- text alignment: 1
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name: Remove DA
----- HyperTalk script -----
on mouseUp
if card field "DAs" is empty then exit mouseup
DOList Delete,Cancel,card field "Das","DIS-+","Choose DAs to delete"
if the result is empty then exit mouseup else put the result into DAs
lock screen
repeat with y = number of items of Das down to 1
delete line (item y of Das) of card field "Das"
end repeat
Set scroll of card field "Das" to 0
end mouseUp
-- part 206 (button)
-- low flags: 00
-- high flags: 2000
-- rect: left=6 top=43 right=59 bottom=21
-- title width / last selected line: 0
-- icon id / first selected line: 0 / 0
-- text alignment: 1
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name: Documents & Applications
----- HyperTalk script -----
on mouseUp
if card field "List" is empty then exit mouseup
answer "Clear applications and documents?" with "OK" or "Cancel"
if it = "OK" then
put empty into card field "List"
put empty into card field "Docs"
put empty into card field "Names"
put empty into card field "Paths"
set scroll of card field "list" to 0
end if
end mouseUp
-- part 204 (button)
-- low flags: 00
-- high flags: 2000
-- rect: left=260 top=43 right=59 bottom=276
-- title width / last selected line: 0
-- icon id / first selected line: 0 / 0
-- text alignment: 1
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name: Stacks
----- HyperTalk script -----
on mouseUp
if card field "Stacks" is empty then exit mouseup
answer "Clear stacks?" with "OK" or "Cancel"
if it = "OK" then
put empty into card field "Stacks"
put empty into card field "StackPaths"
set scroll of card field "stacks" to 0
end if
end mouseUp
-- part 205 (button)
-- low flags: 00
-- high flags: 2000
-- rect: left=260 top=185 right=201 bottom=276
-- title width / last selected line: 0
-- icon id / first selected line: 0 / 0
-- text alignment: 1
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name: Desk Accesories
----- HyperTalk script -----
on mouseUp
if card field "DAs" is empty then exit mouseup
answer "Clear desk accessories?" with "OK" or "Cancel"
if it = "OK" then
put empty into card field "DAs"
set scroll of card field "Das" to 0
end if
end mouseUp
-- part 214 (button)
-- low flags: 00
-- high flags: 2000
-- rect: left=209 top=282 right=298 bottom=231
-- title width / last selected line: 0
-- icon id / first selected line: 29332 / 29332
-- text alignment: 1
-- font id: 0
-- text size: 12
-- style flags: 0
-- line height: 16
-- part name:
----- HyperTalk script -----
on mousedown
HandleDoc
end mousedown
-- part 217 (field)
-- low flags: 81
-- high flags: 0007
-- rect: left=5 top=25 right=320 bottom=509
-- title width / last selected line: 0
-- icon id / first selected line: 0 / 0
-- text alignment: 0
-- font id: 3
-- text size: 10
-- style flags: 0
-- line height: 14
-- part name: Info
----- HyperTalk script -----
on mouseup
visual zoom in
go to this card
hide the target
end mouseup
-- part contents for card part 13
----- text -----
Monday, January 9, 1989
-- part contents for card part 7
----- text -----
9:00 AM
-- part contents for card part 217
----- text -----
Directions: To launch documents, their applications, stacks and DAs, you must first add them
using the add ("+") buttons directly above each list. Before adding documents, you
must have already added the application to which they belong. Documents will appear
in a pop-up menu when you hold the mouse button down on the document button to the
right of each application.
FinderHype keeps track of all the paths to the stacks, documents and applications so
that they will launch perfectly each time. FinderHype will not permit you to add
more than 1 application, document (per application), DA, or stack of the same name.
When you try to do so, the path of the application, document or stack will be updated.
To launch an application, stack, or DA, simply click on its name in the scrolling
list. To launch a document and an application together, choose a document from the
pop-up menu to the right of the application. The application will automatically
launch with the document.
Use the "remove"(-) buttons to remove applications, stacks, DAs and documents from
their respective lists. Shift click to select more than one application, stack or DA to
remove. Optionally, you can click on the trash can icon at the top left of each list (
applications, stacks, and DAs) to remove all of the items contained in that list. When
you remove an application from the list, its documents are removed as well.
Use the launch buttons on the top right of the applications and stack list to quickly
launch an application or stack not added to your list. Use the menubar button on the
top right of the da list to toggle the menubar. The FinderHype menu will perform
some of the standard Finder operations such as renaming and deleting files.
Basic Info: The applications and their documents, stacks and DAs are inserted in alphabetical
order. Use the scroll bars to move up and down through the lists. The pop-up menu
xfcn does not take into account the screen size so the pop-up menu will appear above
where it should on Macs with large moniters.
Kudos: Many of FinderHype's abilities would not be possible except for the availability of some
choice XCMDs and XFCNs. I wish to thank Steve Drazga for the Developer stack from
which several XCMDs and XFCNs were extracted as well as the XCMD and XFCN authors
themselves:
Dewi Williams: Rename File XFCN, Delete File XFCNs
Jim Henderson: Restart XCMD
Will Cate: Shutdown XCMD
Andrew GilMartin: PopUpMenu XFCN
Steve Maller: FileName XFCN
James L. Paul: DoList XCMD
Aron Roberts: GetDANames XCMD
Menus For HyperCard: Michael Long, Nine to Five Software
Copy XFCN: J. Brad Hicks
FinderHype: Designed and Created by Jerry C. Welsh, Jr., Triangle MacConsultants, Inc.
Thanks to Mark and Barry for beta testing in the wee small hours.
•Custom databases (including HyperCard)
•On and off-site training on most Mac applications
•Networking
•System analysis and installation
•Documentation
•Triangle MacConsultants, P.O. Box 13366, RTP, NC 27709 (919) 941-5505•